#ifndef PARTON_H_
#define PARTON_H_
class Parton                     //abstract class
{
public:
	unsigned int xMax;        //grid points number for variable x
	unsigned int Q2Max;       //grid points number for variable Q^2
	unsigned int flavorMax;   //flavor number in the grid data
	double lnxstep;           //step length of ln(x) for the grid data
	double lnQ2step;          //step length of ln(Q^2) for the grid data
	unsigned int Z;           //atomic number for a nuclei
	unsigned int A;           //mass number for a nuclei
	double * grid;            //grid data array
	double fitLinear(double x, double* px, double* pf) const;       //linear interpolation function
	double fitQuadratic(double x, double* px, double* pf) const;    //quadratic interpolation function
public:
	Parton(unsigned int, unsigned int);                  //constructor function, the first parameter is Z, the other is A for a nuclei
	virtual ~Parton(void);                               //deconstructor function
	virtual double getPDF(int, double, double) const =0; //user function to get parton distribution functions
};

#endif
